网络属性与配置
===============================
将Linux主机接入到网络中：
    IP/NETMASK：本地通信
    路由（网关）：跨网络通信
    DNS服务器地址：基于主机名的通信
        主DNS服务器地址
        备用DNS服务器地址
        第三备份DNS服务器地址

 ------------------------------------------------------------------------------
 ------------------------------------------------------------------------------

        配置方式：
            静态指定：
                命令：
                    ifcfg家族：
                        ifconfig：配置IP，NETMASK
                        route：路由
                        netstat：状态及统计数据查看
                    iproute2家族：
                        ip OBJECT：
                            addr：地址和掩码；
                            link：接口
                            route：路由
                        ss：状态及统计数据查看
                    CentOS 7：nm(Network Manager)家族
                        nmcli：命令行工具
                        nmtui：text window 工具
                        
                    注意：
                        (1) DNS服务器指定    
                            配置文件：/etc/resolv.conf
                        (2) 本地主机名配置
                            hostname
                            配置文件：/etc/sysconfig/network
                            CentOS 7：hostnamectl                    
                配置文件：
                    RedHat及相关发行版
                        /etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME
                    
            动态分配：依赖于本地网络中有DHCP服务
                DHCP：Dynamic Host Configure Procotol
                
    网络接口命名方式：
        传统命名：
            以太网：ethX, [0,oo)，例如eth0, eth1, ...
            PPP网络：pppX, [0,...], 例如，ppp0, ppp1, ...
        
        可预测命名方案（CentOS）：
            支持多种不同的命名机制：
                Fireware, 拓扑结构
                
            (1) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用，则根据此索引进行命名，如eno1, eno2, ...
            (2) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用，且可预测，则根据此索引进行命名，如ens1, ens2, ...
            (3) 如果硬件接口的物理位置信息可用，则根据此信息命名，如enp2s0, ...
            (4) 如果用户显式定义，也可根据MAC地址命名，例如enx122161ab2e10, ...
            上述均不可用，则仍使用传统方式命名；
            
            命名格式的组成：
                en：ethernet
                wl：wlan
                ww：wwan
                
                名称类型：
                    o<index>：集成设备的设备索引号；
                    s<slot>：扩展槽的索引号；
                    x<MAC>：基于MAC地址的命名；
                    p<bus>s<slot>：基于总线及槽的拓扑结构进行命名；
                    
回顾：计算机网络基础、Linux网络属性配置
    TCP/IP协议栈：物理层、互联网层、传输层、应用层
        互联网层：IP
        传输层：TCP， UDP
        应用层：http, https, ftp, ldap, ...
        
    链接路层：以太网帧
    互联网层：IP报文
    
    以太网帧：MTU（1500）
        
    Linux网络属性配置：命令，配置文件；



Linux网络属性配置（2）

    ifcfg命令家族： ifconfig, route, netstat
 ------------------------------------------------------------------------------
###：ifconfig：接口及地址查看和管理
SYNOPSIS：
       ifconfig [-v] [-a] [-s] [interface]
       ifconfig [-v] interface [aftype] options | address ...
DESCRIPTION：
    立即生效，但重启会失效
OPTIONS：
    显示：
        -a：显示所有接口，包括inactive状态的接口。
    设置：
        （1）ifconfig  IFACE  IP/MASK  [up|down]
            ~]# ifconfig eno16777736 172.18.21.2/16 up
            ~]# ifconfig
                    .....
                        inet 172.18.21.2  netmask 255.255.0.0  broadcast 172.18.255.255
                    .....
                注意：mask 两种格式都可以（16 或 255.255.0.0）

            （2）ifconfig  IFACE  IP  netmask  NETMASK [up|down]
                    ~]# ifconfig eno16777736 172.18.21.3 netmask 255.255.0.0 up
                    ~]# ifconfig
                            .....
                                    inet 172.18.21.3  netmask 255.255.0.0  broadcast 172.18.255.255
                            .....
                    注意：netmask 格式必须为（255.255.0.0）格式
    混杂模式：
            [-]promisc
                ~]# ifconfig eno16777736 promisc   ：开启
                ~]# ifconfig eno16777736 -promisc   ：关闭

                注意：立即送往内核中的TCP/IP协议栈，并生效；

    管理IPv6地址：
        add addr/prefixlen：添加
        del  addr/prefixlen：移除
 ------------------------------------------------------------------------------
 ###：route：路由查看及管理
DESCRIPTION：
            路由条目类型：
                主机路由：目标地址为单个IP；
                网络路由：目标地址为IP网络；
                默认路由：目标为任意网络，0.0.0.0/0.0.0.0
OPTIONS：
    查看：-n：（不反解地址和端口号）
                ~]# route -n
                        Kernel IP routing table
                        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
                        0.0.0.0         172.18.0.1      0.0.0.0         UG    100    0        0 eno16777736
                        172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eno16777736

    添加：route  add  [-net|-host]  target  [netmask  Nm]  [gw GW]  [[dev] If]
            ~]# route add -net  10.0.0.0/8  gw  192.168.10.1  dev  eth1
            ~]# route add  -net  0.0.0.0/0.0.0.0  gw 192.168.10.1  
            ~]# route add  default  gw 192.168.10.1  
  
    删除：route  del  [-net|-host] target  [gw Gw]  [netmask Nm]  [[dev] If]
            ~]# route  del  -net  10.0.0.0/8  gw 192.168.10.1
            ~]# route  del  default
 ------------------------------------------------------------------------------ 
 ###：netstat：打印网络连接、路由表、接口统计，伪装的连接，和组播成员
OPTIONS：
    显示路由表：netstat  -rn
        -r：显示内核路由表
        -n：数字格式

    显示网络连接：
        netstat  [--tcp|-t]  [--udp|-u]  [--udplite|-U]  [--sctp|-S]  [--raw|-w]  [--listening|-l]  [--all|-a]  [--numeric|-n]   [--extend|-e[--extend|-e]]  [--program|-p]
            -t：TCP协议的相关连接，连接均有其状态；FSM（Finate State Machine）；
            -u：UDP相关的连接
            -w：raw socket相关的连接
            -l：处于监听状态的连接
            -a：所有状态
            -n：以数字格式显示IP和Port；
            -e：扩展格式
            -p：显示相关的进程及PID；
        常用组合：
             -tan,  -uan,  -tnl,  -unl,  -tunlp
                                
    传输层协议：
            tcp：面向连接的协议；通信开始之前，要建立一个虚链路；通信完成后还要拆除连接；
            udp：无连接的协议；直接发送数据报文；
                    
    显示接口的统计数据：
            netstat    {--interfaces|-I|-i}    [iface]   [--all|-a]   [--extend|-e]   [--verbose|-v]   [--program|-p]  [--numeric|-n]
                    
    所有接口：
            netstat  -i

    指定接口：
        netstat  -I<IFace>
 ------------------------------------------------------------------------------
###：ifup：开启网络连接
    ~]# ifup eth0
###：ifdown：关闭网络连接
    ~]# ifdown eth0

注意：通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置



 ------------------------------------------------------------------------------
配置主机名：
 ------------------------------------------------------------------------------
###：hostname：
        查看：hostname
                ~]# hostname
                        localhost.localdomain

        配置：hostname  HOSTNAME
                ~]# hostname mdx
                ~]# hostname
                        mdx

        注意：当前系统有效，重启后无效；


###：hostnamectl：（CentOS 7）
            hostnamectl  status：显示当前主机名信息；
                ~]# hostnamectl status
                        Static hostname: localhost.localdomain
                        Transient hostname: mdx
                        Icon name: computer
                        Chassis: n/a
                        Machine ID: 28abdb675cd1423c9be422f9679c87e7
                        Boot ID: ec261d280e9a41b58708532af9c2fe71
                        Virtualization: vmware
                        Operating System: CentOS Linux 7 (Core)
                        CPE OS Name: cpe:/o:centos:centos:7
                        Kernel: Linux 3.10.0-229.el7.x86_64
                        Architecture: x86_64

            hostnamectl  set-hostname：设定主机名，永久有效；
                ~]# hostnamectl set-hostname mdx

###：配置文件（CentOS 6）：/etc/sysconfig/network
            HOSTNAME=<HOSTNAME>
        注意：重启生效。

###：配置文件（CentOS 7）：/etc/hostname
            <HOSTNAME>
            注意：直接输入主机名子就可以，重启生效。
 ------------------------------------------------------------------------------


配置DNS服务器指向：
 ------------------------------------------------------------------------------
配置文件：/etc/resolv.conf
        nameserver   DNS_SERVER_IP （最多可以指定3个）

        /hosts 文件修改。

        如何测试( host  nslookup   dig)：
            # dig  -t  A  FQDN
                FQDN --> IP

            # dig  -x  IP
                IP --> FQDN
 ------------------------------------------------------------------------------


    iproute2家族： rpm -qi iproute
 ------------------------------------------------------------------------------
 ###：ip：查看管理路由，设备，策略路由和隧道。
SYNOPSIS：
        ip [ OPTIONS ] OBJECT { COMMAND | help }
        OBJECT := { link | addr | route | netns  }
        注意： OBJECT可简写，各OBJECT的子命令也可简写；
OPTIONS：
    （1）ip link： network device configuration
            1：  ip  link  set - change device attributes
                dev NAME (default)：指明要管理的设备，dev关键字可省略；
                up和down：
                multicast on或multicast off：启用或禁用多播功能；
                name NAME：重命名接口
                mtu NUMBER：设置MTU的大小，默认为1500；
                netns PID：ns为namespace，用于将接口移动到指定的网络名称空间；
                            
            2：ip  link  show  - display device attributes

            3：ip  link  help -  显示简要使用帮助；
                        
    （2）ip netns：  - manage network namespaces.
             1： ip  netns  list：列出所有的netns
             2：ip  netns  add  NAME：创建指定的netns
             3：ip  netns  del  NAME：删除指定的netns
             4：ip  netns   exec  NAME  COMMAND：在指定的netns中运行命令

    （3）ip address - protocol address management.
            1：ip address add - add new protocol address
                ip  addr  add  IFADDR  dev  IFACE
                    [label NAME]：为额外添加的地址指明接口别名；
                    [broadcast ADDRESS]：广播地址；会根据IP和NETMASK自动计算得到；
                    [scope SCOPE_VALUE]：
                        global：全局可用；
                        link：接口可用；
                        host：仅本机可用；                                             

            2：ip address delete - delete protocol address
                ip addr  delete  IFADDR  dev  IFACE 
                                        
            3：ip address show - look at protocol addresses
                ip  addr   list  [IFACE]：显示接口的地址；
                                    
            4：ip address flush - flush protocol addresses
                ip  addr  flush  dev  IFACE
                            
    （4）ip route - routing table management
            1：ip route add - add new route
            2：ip route change - change route
            3：ip route replace - change or add new one
                    ip  route   add  TYPE PREFIX  via GW  [dev  IFACE]  [src SOURCE_IP]
                    示例：
                        # ip route add 192.168.0.0/24  via 10.0.0.1  dev eth1 src  10.0.20.100
                        # ip  route  add default  via  GW                       

            4：ip route delete - delete route
                    ip  route  del  TYPE PRIFIX 
                    示例：
                        # ip  route delete  192.168.1.0/24
                                        
            5：ip route show - list routes
                    TYPE PRIFIX  
            6：ip route flush - flush routing tables
                    TYPE  PRIFIX

            7：ip route get - get a single route
                    ip  route  get  TYPE PRIFIX
                    示例：ip route  get  192.168.0.0/24
------------------------------------------------------------------------------
 ###：ss：另一个实用程序来调查插座 
SYNOPSIS
       ss [options] [ FILTER ]
OPTIONS：
        -t：TCP协议的相关连接
        -u：UDP相关的连接
        -w：raw socket相关的连接
        -l：监听状态的连接
        -a：所有状态的连接
        -n：数字格式
        -p：相关的程序及其PID
        -e：扩展格式信息
        -m：内存用量
        -o：计时器信息

        FILTER := [ state TCP-STATE ]  [ EXPRESSION ]

        TCP的常见状态：
            TCP FSM：
                LISTEN：监听
                ESTABLISEHD：建立的连接
                FIN_WAIT_1：
                FIN_WAIT_2：
                SYN_SENT：
                SYN_RECV：
                CLOSED：

        EXPRESSION：
            dport = 
            sport = 
                示例：'( dport = :22 or sport = :22)'
                    ~]# ss   -tan    '(  dport = :22 or sport = :22  )'
                    ~]# ss  -tan  state  ESTABLISHED
 ------------------------------------------------------------------------------
配置文件：
       （1） IP/NETMASK/GW/DNS等属性的配置文件：（IFACE：接口名称；）
            /etc/sysconfig/network-scripts/ifcfg-IFACE
                ifcfg-IFACE配置文件参数：
                    DEVICE：此配置文件对应的设备的名称；
                    ONBOOT：在系统引导过程中，是否激活此接口；
                    UUID：此设备的惟一标识；
                    IPV6INIT：是否初始化IPv6；
                    BOOTPROTO：激活此接口时使用什么协议来配置接口属性，常用的有dhcp、bootp、static、none；
                    TYPE：接口类型，常见的有Ethernet, Bridge；
                    DNS1：第一DNS服务器指向；
                    DNS2：备用DNS服务器指向；
                    DOMAIN：DNS搜索域；
                    IPADDR： IP地址；
                    NETMASK：子网掩码；CentOS 7支持使用PREFIX以长度方式指明子网掩码；
                    GATEWAY：默认网关；
                    USERCTL：是否允许普通用户控制此设备；
                    PEERDNS：如果BOOTPROTO的值为“dhcp”，是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向；默认为允许；
                    HWADDR：设备的MAC地址；
                    NM_CONTROLLED：是否使用NetworkManager服务来控制接口；

            ifcfg-IFACE配置文件命令修改：
                CentOS 6：system-config-network (setup)
                CentOS 7: nmtui

        （2）路由配置文件：/etc/sysconfig/networkj-scripts/route-IFACE



            网络服务：
                network
                NetworkManager 

                管理网络服务：
                    CentOS 6:  service  SERVICE  {start|stop|restart|status}
                    CentOS 7：systemctl  {start|stop|restart|status}  SERVICE[.service]

                配置文件修改之后，如果要生效，需要重启网络服务；
                    CentOS 6：# service  network  restart
                    CentOS 7：# systemctl  restart  network.service

        用到非默认网关路由：/etc/sysconfig/network-scripts/route-IFACE
            支持两种配置方式，但不可混用；
                (1) 每行一个路由条目：
                    TARGET  via  GW

                (2) 每三行一个路由条目：
                    ADDRESS#=TARGET
                    NETMASK#=MASK
                    GATEWAY#=NEXTHOP
                    
    给接口配置多个地址：
        ip addr之外，ifconfig或配置文件都可以；
        
        (1) ifconfig  IFACE_LABEL  IPADDR/NETMASK
        
            IFACE_LABEL： eth0:0, eth0:1, ...
            
        (2) 为别名添加配置文件；
            DEVICE=IFACE_LABEL
            BOOTPROTO：网上别名不支持动态获取地址；
                static, none

配置网络：http://blog.csdn.net/johnnycode/article/details/40624403
 ------------------------------------------------------------------------------
 ###：nmcli：
        nmcli  [ OPTIONS ] OBJECT { COMMAND | help }

            device - show and manage network interfaces
                COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }

            connection - start, stop, and manage network connections
                COMMAND := { show | up | down | add | edit | modify | delete | reload | load }

                modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>

                如何修改IP地址等属性：
                    # nmcli  conn  modify  IFACE  [+|-]setting.property  value
                        ipv4.address
                        ipv4.gateway
                        ipv4.dns1
                        ipv4.method
                            manual